package cn.timeapi.Applet.Mall.CatSquare.util;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;

/**
 * 描述:文件工具
 * @author Vincent Vic
 * create 2020-02-29 13:08
 */


public class FileUtil {

    private static Logger log = LoggerFactory.getLogger(FileUtil.class);
    /**
     * 判断是否是图片
     * @param Suffix 不包括小数点
     * @return
     */
    public static Boolean isImageFileBySuffix(String Suffix){
        Suffix = Suffix.toLowerCase();
        //图片格式
        String[] FILETYPES = new String[]{
                "jpg", "bmp", "jpeg", "png", "gif",
                "JPG", "BMP", "JPEG", "PNG", "GIF"
        };

        if(!StringUtils.isBlank(Suffix)){
            for (int i = 0; i < FILETYPES.length; i++) {
                String fileType = FILETYPES[i];
                if (Suffix.compareTo(fileType) == 0) {
                    return true;
                }
            }
        }
        return false;
    }


    public static Boolean isImageFile(String img){
            Boolean flag =false;
             img = img.toLowerCase();
            //图片格式
        String[] FILETYPES = new String[]{
                ".jpg", ".bmp", ".jpeg", ".png", ".gif",
                ".JPG", ".BMP", ".JPEG", ".PNG", ".GIF"
        };
            if(!StringUtils.isBlank(img)){
                for (int i = 0; i < FILETYPES.length; i++) {
                    String fileType = FILETYPES[i];
                    if (img.endsWith(fileType)) {
                        flag = true;
                        break;
                    }
                }
            }

            return flag;

    }

    //创建文件夹，如果文件夹存在则不会创建
    public static void createFileDir(String path){
        //判断文件夹存不存在
        File fileDir = new File(path);
        if (!fileDir.exists()){
            fileDir.setWritable(true);
            fileDir.mkdirs();
        }
    }

    //创建文件写入数据
    public static Boolean createFile(String path,String fileName,String data) throws FileNotFoundException {
        File file = new File(path+fileName);
        log.error("创建文件"+path+fileName);
        //创建文件夹，如果文件夹存在则不会创建
        createFileDir(path);
        FileOutputStream outputStream = new FileOutputStream(file);
        try {
            if (data != null )
                outputStream.write(data.getBytes());
            else{
                log.error("创建文件的时候数据为空");
                return false;
            }

        } catch (IOException e) {
            log.error("[createFile]文件创建失败 路径["+path+fileName+"] ==>"+e);
            e.printStackTrace();
            return false;
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                log.error("创建文件后关闭资源失败 ==>"+e);
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }


    //读取一个文件数据
    public static String readFile(String path){
        StringBuffer res = new StringBuffer();
        String content=null;
        try {
            int size=0;
            //定义一个字节缓冲区,该缓冲区的大小根据需要来定义
            byte[] buffer=new byte[1024];
            FileInputStream fis=new FileInputStream(path);
            //循环来读取该文件中的数据
            while((size=fis.read(buffer))!=-1){
                content=new String(buffer, 0, size);
                res.append(content);
            }
            //关闭此文件输入流并释放与此流有关的所有系统资源。
            fis.close();
        } catch (Exception e) {
            log.error("[readFile]文件读取失败 路径["+path+"] ==>"+e);
            e.printStackTrace();
        }
        return res.toString();
    }

    // 复制文件
    public static void copyFile(String sourceFile, String targetFile){
        try {
            copyFiles(new File(sourceFile),new File(targetFile));
        } catch (IOException e) {
            log.error("[copyFile]文件复制文件失败 路径["+sourceFile+"==>"+targetFile+"] ==>"+e);
            e.printStackTrace();
        }
    }

    // 复制文件 私有实现
    private static void copyFiles(File sourceFile, File targetFile) throws IOException {
        BufferedInputStream inBuff = null;
        BufferedOutputStream outBuff = null;
        try {
            // 新建文件输入流并对它进行缓冲
            inBuff = new BufferedInputStream(new FileInputStream(sourceFile));

            // 新建文件输出流并对它进行缓冲
            outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));

            // 缓冲数组
            byte[] b = new byte[1024 * 5];
            int len;
            while ((len = inBuff.read(b)) != -1) {
                outBuff.write(b, 0, len);
            }
            // 刷新此缓冲的输出流
            outBuff.flush();
        } finally {
            // 关闭流
            if (inBuff != null)
                inBuff.close();
            if (outBuff != null)
                outBuff.close();
        }
    }

    //得到项目文件路径
    public static String getPath()
    {
        String path = FileUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        if(System.getProperty("os.name").contains("dows"))
        {
            path = path.substring(1,path.length());
        }
        if(path.contains("jar"))
        {
            path = path.substring(0,path.lastIndexOf("."));
            return path.substring(0,path.lastIndexOf("/"));
        }
        return path.replace("target/classes/", "");
    }

    //判断路径标识
    public static String getPathSymol(String path){
        if(path.indexOf("/") != -1){
            return "/";
        } else if(path.indexOf("\\") != -1){
            return "\\";
        }
        return "/";
    }
}